/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package op;

import core.QuebraString;
import java.util.Date;
import java.util.Map;
import java.util.StringTokenizer;

/**
 *
 * @author Jônatas
 */
class QuebraStringPabxTaritron implements QuebraString {

    public QuebraStringPabxTaritron() {
    }

    public EntradaAbstrata quebraString(Map<String, Object> parametersMap) throws Exception {
        Telefone origem = (Telefone) parametersMap.get("origem");
        String line = parametersMap.get("line").toString();

        String[] tokens = getTokens(line);

        String tipo1 = tokens[0];
        String dataHora = tokens[1];
        String tempo = tokens[2];
        String telefoneStr = tokens[3];

        Telefone destino = getDestino(telefoneStr);

        int last = tokens.length - 1;

        String custoStr = tokens[last].replace(",", ".");
        String tipo2 = tokens[last - 1];

        String local = "";

        for (int i = 4; i < last - 1; i++) {
            local += tokens[i] + " ";
        }

        local = local.trim();

        EntradaAbstrata entrada = new Ligacao();

        entrada.setNumeroDeOrigem(origem);
        entrada.setCusto(Double.valueOf(custoStr));
        entrada.setDataOrigemLigacao(getDate(dataHora));
        entrada.setDuracaoLigacaoSegundos(EntradaAbstrata.getDuracaoLigacaoSegundos(tempo));
        String tipo = tipo1 + " " + tipo2;
        entrada.setTipoDeLigacao(tipo);
        entrada.setPlanoLigacao(tipo);
        entrada.setDestino(destino);
        entrada.setLocalDaLigacao(local);
        return entrada;
    }

    private Date getDate(String dataHora) {

        String data = dataHora.substring(0, 10);
        String hora = dataHora.substring(10);

        return EntradaAbstrata.criaDate(data, hora);

    }

    private String[] getTokens(String line) {
        StringTokenizer tokenizer = new StringTokenizer(line);
        String[] tokens = new String[tokenizer.countTokens()];

        for (int i = 0; i < tokens.length; i++) {
            tokens[i] = tokenizer.nextToken();
        }

        return tokens;

    }

    private Telefone getDestino(String telefoneStr) {

        Telefone destino = null;

        char[] numeros = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};

        String temp = "";

        for (int i = 0; i < telefoneStr.length(); i++) {
            char c = telefoneStr.charAt(i);

            for (char n : numeros) {
                if (c == n) {
                    temp += "" + c;
                    break;
                }
            }
        }

        telefoneStr = temp;


        if (telefoneStr.length() == 8) {
            telefoneStr = "035" + telefoneStr;
            destino = new Telefone(telefoneStr);
        } else if (telefoneStr.length() == 13) {
            telefoneStr = "0" + telefoneStr.substring(3);
            destino = new Telefone(telefoneStr);
        } else {
            destino = new Telefone(telefoneStr, true);
        }

        return destino;

    }
}
